//给定一个平衡括号字符串 S，按下述规则计算该字符串的分数： 
//
// 
// () 得 1 分。 
// AB 得 A + B 分，其中 A 和 B 是平衡括号字符串。 
// (A) 得 2 * A 分，其中 A 是平衡括号字符串。 
// 
//
// 
//
// 示例 1： 
//
// 输入： "()"
//输出： 1
// 
//
// 示例 2： 
//
// 输入： "(())"
//输出： 2
// 
//
// 示例 3： 
//
// 输入： "()()"
//输出： 2
// 
//
// 示例 4： 
//
// 输入： "(()(()))"
//输出： 6
// 
//
// 
//
// 提示： 
//
// 
// S 是平衡括号字符串，且只含有 ( 和 ) 。 
// 2 <= S.length <= 50 
// 
// Related Topics栈 | 字符串 
//
// 👍 365, 👎 0 
//
//
//
//

package leetcode.editor.day;

import java.util.Stack;

// 856. 括号的分数
// https://leetcode.cn/problems/score-of-parentheses/
class ScoreOfParentheses {
    public static void main(String[] args) {
        Solution solution = new ScoreOfParentheses().new Solution();
        solution.scoreOfParentheses("(()(()))");
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int scoreOfParentheses(String s) {
            Stack<Integer> stack = new Stack<>();
            stack.push(0);
            for (char c : s.toCharArray()) {
                if (c == '(') {
                    stack.push(0);
                } else {
                    int pop = stack.pop();
                    // 如果前面是左括号，那就加一
                    if (pop == 0) {
                        stack.push(stack.pop() + 1);
                    } else {
                        // 如果前面有分值，那就需要乘2
                        stack.push(stack.pop() + pop * 2);
                    }
                }
            }

            return stack.pop();
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}
